In [8]:
import netCDF4 as nc
import numpy as np
import matplotlib.pyplot as plt
import os
import math
from final_frame import final_frame
In [2]:
# Evaluate the norm of the difference between the two solutions
# at each time step
# Extract dimensions
def get_data(time, dataset):    
    n_members = dataset.dimensions["n_members"].size
    n_snapshots = dataset.dimensions["n_snapshots"].size
    x_size_and_boundary = dataset.dimensions["x_size_and_boundary"].size
    n_coupled_and_y_size_and_boundary = dataset.dimensions[
        "n_coupled_and_x_size_and_boundary"
    ].size
    n_coupled = dataset.getncattr("n_coupled")
    x_size = dataset.getncattr("x_length")
    y_size = dataset.getncattr("y_length")

    # Extract the data variable
    data = dataset.variables["data"][:]

    coupled_idx = 0
    return data[0, time, :, coupled_idx::n_coupled]
In [3]:
def get_steady_state(dataset):
    data = dataset.variables["data"][:]
    n_coupled = dataset.getncattr("n_coupled")


    steady_state = np.zeros_like(data[0, 0, :, :])
    steady_state[:, 0::n_coupled] = A
    steady_state[:, 1::n_coupled] = B / A
    return steady_state[:, 0::n_coupled]
In [4]:
def conv_plot(filename, id):
    d = nc.Dataset(filename, mode="r")
    steady_state = get_steady_state(d)
    n_snapshots = d.dimensions["n_snapshots"].size
    l1 = np.zeros((n_snapshots, 3))
    final_state = get_data(n_snapshots - 1, d)
    steady_state = get_steady_state(d)
    for t in range(n_snapshots):
        data = get_data(t, d)
        d_final = np.linalg.norm(data - final_state) / np.prod(data.shape)
        d_steady = np.linalg.norm(data - steady_state) / np.prod(data.shape)
        l1[t, 0] = t
        l1[t, 1] = d_final
        l1[t, 2] = d_steady

    # plt.plot(l1[:, 0], l1[:, 1], label=f"Final state ({id})")
    plt.plot(l1[:, 0], l1[:, 2], label=f"Steady state ({id})")
    plt.legend(loc="upper left", bbox_to_anchor=(1.05, 1))
In [5]:
directory = "../data/vary_ab"
In [6]:
# for filename in os.listdir(directory):
#     if os.path.isfile(os.path.join(directory, filename)):
#         if filename.endswith("_output.nc"):
#             B = filename.split("_")[4]
#             B = float(B)
#             A = B * 5 / 9
#             # print(A)
#             conv_plot(filename, B)
In [16]:
directory = "../data/vary_b"
files = []
for filename in os.listdir(directory):
    if os.path.isfile(os.path.join(directory, filename)):
        filename = os.path.join(directory, filename)
        if filename.endswith("_output.nc"):
            files.append(filename)

files.sort(key=lambda x: float(x.split("_")[5]))
for f in files:
    print(f.split("_")[5])
    final_frame(f)
    plt.show()
7
No description has been provided for this image
7.5
No description has been provided for this image
8
No description has been provided for this image
8.5
No description has been provided for this image
9
No description has been provided for this image
9.5
No description has been provided for this image
10
No description has been provided for this image